package org.example.ims.Utils;

import java.awt.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

/**
 * 颜色工具类，根据业务逻辑生成对应的颜色值
 */
public class ColorUtils {

    // 预定义常用颜色常量
    public static final String PRIMARY = "#165DFF";
    public static final String SUCCESS = "#00B42A";
    public static final String WARNING = "#FF7D00";
    public static final String DANGER = "#F53F3F";
    public static final String INFO = "#86909C";
    public static final String SECONDARY = "#0FC6C2";

    // 库存状态颜色映射
    private static final Map<String, String> STOCK_STATUS_COLORS = new HashMap<>();
    static {
        STOCK_STATUS_COLORS.put("充足", SUCCESS);
        STOCK_STATUS_COLORS.put("低库存", WARNING);
        STOCK_STATUS_COLORS.put("缺货", DANGER);
        STOCK_STATUS_COLORS.put("待补货", PRIMARY);
    }

    // 数据趋势颜色映射
    private static final Map<String, String> TREND_COLORS = new HashMap<>();
    static {
        TREND_COLORS.put("上升", SUCCESS);
        TREND_COLORS.put("下降", DANGER);
        TREND_COLORS.put("持平", INFO);
    }

    /**
     * 根据库存状态获取对应的颜色
     * @param status 库存状态（如：充足、低库存、缺货、待补货）
     * @return 颜色值（HEX格式）
     */
    public static String getColorByStockStatus(String status) {
        return STOCK_STATUS_COLORS.getOrDefault(status, INFO);
    }

    /**
     * 根据数据趋势获取对应的颜色
     * @param trend 趋势（如：上升、下降、持平）
     * @return 颜色值（HEX格式）
     */
    public static String getColorByTrend(String trend) {
        return TREND_COLORS.getOrDefault(trend, INFO);
    }

    /**
     * 根据数值获取对应的颜色（用于评分、百分比等场景）
     * @param value 数值（0-100之间）
     * @return 颜色值（HEX格式）
     */
    public static String getColorByValue(double value) {
        if (value >= 80) {
            return SUCCESS; // 绿色（良好）
        } else if (value >= 50) {
            return WARNING; // 黄色（一般）
        } else {
            return DANGER;  // 红色（危险）
        }
    }

    /**
     * 获取一组随机但视觉协调的颜色
     * @param count 需要的颜色数量
     * @return 颜色数组（HEX格式）
     */
    public static String[] getRandomHarmoniousColors(int count) {
        String[] colors = new String[count];
        Random random = new Random();

        // 生成基础色调（0-360度）
        float baseHue = random.nextFloat();

        for (int i = 0; i < count; i++) {
            // 在基础色调周围生成协调的颜色
            float hue = (baseHue + (float) i / count) % 1.0f;
            float saturation = 0.7f + random.nextFloat() * 0.3f; // 饱和度70%-100%
            float brightness = 0.7f + random.nextFloat() * 0.3f; // 亮度70%-100%

            // HSB转RGB再转HEX
            Color color = Color.getHSBColor(hue, saturation, brightness);
            colors[i] = String.format("#%02x%02x%02x", color.getRed(), color.getGreen(), color.getBlue());
        }

        return colors;
    }

    /**
     * 获取半透明颜色（用于图表填充色）
     * @param baseColor 基础颜色（HEX格式）
     * @param alpha 透明度（0-100）
     * @return 半透明颜色（HEX格式）
     */
    public static String getTransparentColor(String baseColor, int alpha) {
        // 移除可能存在的#符号
        if (baseColor.startsWith("#")) {
            baseColor = baseColor.substring(1);
        }

        // 解析RGB值
        int r = Integer.parseInt(baseColor.substring(0, 2), 16);
        int g = Integer.parseInt(baseColor.substring(2, 4), 16);
        int b = Integer.parseInt(baseColor.substring(4, 6), 16);

        // 计算透明度百分比
        float alphaPercent = Math.max(0, Math.min(100, alpha)) / 100.0f;

        // 返回带有透明度的RGBA格式
        return String.format("rgba(%d, %d, %d, %.2f)", r, g, b, alphaPercent);
    }

    // 示例使用
    public static void main(String[] args) {
        System.out.println("库存状态颜色：");
        System.out.println("充足: " + getColorByStockStatus("充足"));
        System.out.println("低库存: " + getColorByStockStatus("低库存"));

        System.out.println("\n数据趋势颜色：");
        System.out.println("上升: " + getColorByTrend("上升"));
        System.out.println("下降: " + getColorByTrend("下降"));

        System.out.println("\n数值颜色：");
        System.out.println("90分: " + getColorByValue(90));
        System.out.println("60分: " + getColorByValue(60));
        System.out.println("30分: " + getColorByValue(30));

        System.out.println("\n随机协调颜色：");
        String[] randomColors = getRandomHarmoniousColors(5);
        for (String color : randomColors) {
            System.out.println(color);
        }

        System.out.println("\n半透明颜色：");
        System.out.println("50%透明度的主色: " + getTransparentColor(PRIMARY, 50));
    }
}